<?php
class Delivery_Model_DbTable_Pedidos
	extends Delivery_Model_DbTable_Abstract

{
	protected $_name = 'pedidos';
	protected $_primary = 'idPedido';
	
	public function guardar( $pedido )
	{
   		return parent::insert(
   			$this->_fecha( $this->getData( $pedido ), true, true)
   		);   		
	}
	
	public function actualizar( $pedido )
	{
   		return parent::update(
   			$this->_fecha( $this->getData( $pedido ), false, true), 
   			array('idPedido = ?' => $pedido->idPedido)
   		);
	}
	
	public function getById( $idPedido, $idNegocio = null, $idCliente = null)
	{
		$select = $this->select()->where('idPedido = ?', $idPedido, Zend_Db::INT_TYPE );
		
		if ( $idNegocio ){
			$select->where('idNegocio = ?', $idNegocio, Zend_Db::INT_TYPE );
		}
		
		if ( $idCliente ){
			$select->where('idCliente = ?', $idCliente, Zend_Db::INT_TYPE );
		}		
		
		return $this->_db->fetchRow( $select );
	}
			
	public function getByCliente( $idCliente, $idNegocio=null )
	{
	    
	    $select = $this->select()
					->where('idCliente = ?', $idCliente, Zend_Db::INT_TYPE )	
					->order('fechaCreacion DESC')		;
	    
	    
	    if ( is_int($idNegocio)){
	        $select->where('idNegocio = ?', $idNegocio, Zend_Db::INT_TYPE )	;
	    }elseif(is_array($idNegocio)){
	        $select->where('idNegocio IN (?)', $idNegocio, Zend_Db::INT_TYPE )	;
	    }
	    
	    
		return 
			$this->_db->fetchAssoc(
				$select
			);
	}
	
	public function getByNegocio( $idNegocio )
	{
	    $select = $this->select();
	    
	    if ( is_int($idNegocio)){
	        $select->where('idNegocio = ?', $idNegocio, Zend_Db::INT_TYPE )	;
	    }elseif(is_array($idNegocio)){
	        $select->where('idNegocio IN (?)', $idNegocio, Zend_Db::INT_TYPE )	;
	    }
	    
		return $this->_db->fetchAssoc( $select	);
	}
	
	public function getByParams( $params, $offset = null, $limit = null, $order = null )
	{
		$select = $this->select();
		
		if ( isset($params['idNegocio'])){
			$select->where('idNegocio = ?', $params['idNegocio'], Zend_Db::INT_TYPE);
		}
		
		if ( isset($params['estado'])){
			$select->where('estado = ?', $params['estado'], Zend_Db::INT_TYPE);
		}
		
		if ( $order ){
			$select->order( $order );
		}
		
		if ( $limit && !is_null($offset) ){
			$select->limit( $limit, $offset );
		}
		
		return $this->_db->fetchAssoc($select);
	}

	public function toBeClosed( $minutes )
	{		
		
		$select = $this->select()	
						->where('estado = ?', Delivery_Model_Pedido::PEDIDO, Zend_Db::INT_TYPE)
						->where("CURRENT_TIMESTAMP > fechaCancelacion");
		
		return 
			$this->_db->fetchAssoc(
				$select
			);
	}
	
	public function openOrders( $idNegocio )
	{		
		
		$select = $this->select()	
						->where('idNegocio = ?', $idNegocio, Zend_Db::INT_TYPE)
						->where('estado < 4')
						->order("estado");
		
		return 
			$this->_db->fetchAssoc(
				$select
			);
	}
	
	public function countByParams( $params )
	{
		
		$select = $this->select()
				->from($this, array('count' => 'COUNT(1)'));
		
		if ( isset($params['idNegocio'])){
			$select->where('idNegocio = ?', $params['idNegocio'], Zend_Db::INT_TYPE);
		}
		
		if ( isset($params['estado'])){
			$select->where('estado = ?', $params['estado'], Zend_Db::INT_TYPE);
		}
		
		$result = $this->_db->fetchRow($select);
		
		return $result['count'];
	}
	
	public function inAnyOrder( $key, $value )
	{
		
		$select = $this->select()
				->from($this, array('count' => 'idPedido'))
				->where("{$key} = ?", $value, Zend_Db::INT_TYPE);
				
		$result = $this->_db->fetchRow($select);
		
		return !empty($result);
	}
	
	protected function getData( $pedido )
	{
		return array (
		   	'idNegocio'			=> $pedido->idNegocio,	
			'idCliente'			=> $pedido->idCliente,	    			
		   	'idDireccionCliente'=> $pedido->idDireccionCliente,
		   	'notasCliente'		=> $pedido->notasCliente,
			'precioFinal'		=> $pedido->precioFinal,
			'costoEnvio'		=> $pedido->costoEnvio,
			'estado'			=> $pedido->estado,
			'pagaCon'			=> $pedido->pagaCon,
			'fechaEntrega'		=> $pedido->fechaEntrega,
			'fechaCancelacion'	=> $pedido->fechaCancelacion,
		);
	}
	
}